package core.compagnie;

import java.util.ArrayList;
import serveur.SimulationServeur;

import core.Avion;
import core.RandomStringUtils;
import core.vols.Vol;

public class CompAerienne {
	
	private String nom;
	private String code;
	private ArrayList<Avion> flotte;
	private ArrayList<Vol> volsEffectues;
	private SimulationServeur serveur;
	private MetaCompagnie metaCompAssocie;
	
	/**
	 * @param nom
	 */
	public CompAerienne(String nom, String code, SimulationServeur serveur) {
		super();
		this.nom = nom;
		this.code = code;
		this.serveur = serveur;
		flotte = new ArrayList<Avion>();
		volsEffectues = new ArrayList<Vol>();
	}
	
	/**
	 * @param nom
	 * @param code
	 * @param serveur
	 * @param metaCompAssocie
	 */
	public CompAerienne(String nom, String code, SimulationServeur serveur,
			MetaCompagnie metaCompAssocie) {
		super();
		this.nom = nom;
		this.code = code;
		this.serveur = serveur;
		this.metaCompAssocie = metaCompAssocie;
		flotte = new ArrayList<Avion>();
		volsEffectues = new ArrayList<Vol>();
	}


	public void generateFlotte(int n) {
		for(int i=0;i<n;i++) {
			String nomAvion = RandomStringUtils.randomAlphabetic(2)+"-"+RandomStringUtils.randomAlphabetic(3);
			while (serveur.getAvions().containsKey(nomAvion)) nomAvion = RandomStringUtils.randomAlphabetic(2)+"-"+RandomStringUtils.randomAlphabetic(3);
			Avion a = new Avion(this, nomAvion);
			addAvion(new Avion(this, nomAvion));
			serveur.addAvion(a);
		}
	}
	
	/**
	 * @return the nom
	 */
	public String getNom() {
		return nom;
	}
	
	public void addAvion(Avion a) {
		flotte.add(a);
	}
	
	public void removeAvion(Avion a) {
		flotte.remove(a);
	}
	/**
	 * @return the flotte
	 */
	public ArrayList<Avion> getFlotte() {
		return flotte;
	}
	public String getCode() {
		return code;
	}
	public ArrayList<Vol> getVolsEffectues() {
		return volsEffectues;
	}
	public void setVolsEffectues(ArrayList<Vol> volsEffectues) {
		this.volsEffectues = volsEffectues;
	}
		
	/**
	 * @return the metaCompAssocie
	 */
	public MetaCompagnie getMetaCompAssocie() {
		return metaCompAssocie;
	}

	/**
	 * @param metaCompAssocie the metaCompAssocie to set
	 */
	public void setMetaCompAssocie(MetaCompagnie metaCompAssocie) {
		this.metaCompAssocie = metaCompAssocie;
	}

	public void addVol(Vol v) {
		volsEffectues.add(v);
	}
	
	public void removeVol(Vol v) {
		volsEffectues.remove(v);
	}
	
	public void clearVols() {
		volsEffectues.clear();
	}

}
